﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using SistemaDeBastanteodePoderes.Persistencia;
using SistemaDeBastanteodePoderes.Dominio;
using NHibernate.Exceptions;
using System.Data.SqlClient;


namespace SistemaDeBastanteodePoderes.Negocio
{
    public class AdministradorServiceImpl : IAdministradorService
    {
        #region region de dependencias

        IUsuarioDAO usuarioDAO = null;

 
        IRolesDAO rolDAO = null;

        #endregion

        #region operaciones de negocio

        public Usuario  RegistrarUsuario(string Nombre, string Password, int Rol)
        {

           
            if (Nombre == null || Password == null ||
                Rol == 0)
                throw new DatosInsuficientesException("Faltan datos para crear al usuario");
        
            Usuario usuarioResult = null;
            Usuario usuarioACrear = new Usuario();
            usuarioACrear.Nombre = Nombre;
            usuarioACrear.Password = Password;
            usuarioACrear.Rol = rolDAO.Obtener(Rol);
            try
            {
               usuarioResult = usuarioDAO.Crear(usuarioACrear);
            }
            catch (GenericADOException exNH)
            {
                throw new EntidadRepetidaException(exNH.InnerException.Message);
            }
            catch (Exception e)
            {
                throw new EntidadRepetidaException("Error desconocido", e);
            }

            return usuarioResult;

        }

        public Roles AgregarRol(string Descripcion)
        {
            //Excepcion si falta algun dato
            if (Descripcion == null)
                throw new DatosInsuficientesException("Faltan datos para agregar rol");

            Roles rolResult = null;
            Roles rolACrear = new Roles();
            rolACrear.Descripcion = Descripcion;
            

            try
            {
                rolResult = rolDAO.Crear(rolACrear);
            }
            catch (GenericADOException exNH)
            {
                throw new PoderRepetidoException(exNH.InnerException.Message);
            }
            catch (Exception e)
            {
                throw new PoderRepetidoException("Error desconocido", e);
            }

            return rolResult;

        }
        #endregion

        #region metodos de soporte para entidad usuario
        public Usuario ObtenerUsuario(int codigo)
        {
            return usuarioDAO.Obtener(codigo);
        }

        public ICollection<Usuario> ListarUsuarios()
        {
            return usuarioDAO.ListarTodos();
        }
        #endregion

        #region metodos de soporte para entidad rol
        public Roles ObtenerRol(int codigo)
        {
            return rolDAO.Obtener(codigo);
        }

      
        #endregion
        
    }
}